home *** CD-ROM | disk | FTP | other *** search
-
- /* SP_InfoSubs.c
- - Functions for ST-Support -
- (c) 1994 by Andreas R. Kleinert
- Last changes : 17.05.1994
- */
-
- #include "spobject.h"
-
- #include <ctype.h>
-
-
- /* PUBLIC functions (high level) */
-
- ULONG __saveds __asm SPO_FileInfoRequest( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 struct Window *window, register __a3 ULONG future);
- ULONG __saveds __asm SPO_CheckFileType(register __a1 BPTR handle, register __a2 UBYTE *filename, register __a3 APTR future);
- void __saveds __stdargs SPLI_SPrintf(APTR buffer, char *formatstring, ...);
-
-
- /* *************************************************** */
- /* * * */
- /* * SPO_FileInfoRequest : Display File Information * */
- /* * * */
- /* *************************************************** */
-
- ULONG __saveds __asm SPO_FileInfoRequest( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 struct Window *window, register __a3 ULONG future)
- {
- struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;
-
- ULONG retval = SPERR_NO_ERROR;
- char buffer [2001], h_buf [80], hbuf2[5];
- ULONG idcmp = N, noinfo = TRUE;
- struct EasyStruct *estr;
- struct Window *disp_win = window;
-
- if(!SPObjectHandle) return(SPERR_NO_HANDLE);
-
- buffer[0] = (char) 0;
-
- if(SPObjectHandle->ah_STModule)
- {
- struct STHeader *STHeader = SPObjectHandle->ah_STModule;
- UWORD i, j;
-
- noinfo = FALSE;
-
- strcat(buffer, "\n File Information"
- "\n\n File Type : SoundTracker/ProTracker/NoiseTracker (ST)");
-
- strcat(buffer, "\n");
-
- strcat(buffer, "\n Module-Name : ");
- strcat(buffer, SPObjectHandle->ah_ReadName);
-
- strcat(buffer, "\n Module-Length : ");
- sprintf(h_buf, "%ld Bytes", SPObjectHandle->ah_STLen);
- strcat(buffer, h_buf);
-
- strcat(buffer, "\n Module-Type : ");
-
- strncpy(hbuf2, &STHeader->st_ID[0], 4);
- hbuf2[4] = (UBYTE) 0;
-
- sprintf(h_buf, "%4s", hbuf2);
- strcat(buffer, h_buf);
-
- strcat(buffer, "\n Song-Name : ");
- strcat(buffer, STHeader->st_SongName);
-
- for(i=0; i<31; i++) if(!STHeader->st_Instruments[i].st_InstrumentLength) { i++; break; }
-
- sprintf(h_buf, "\n %-2ld Instruments : \n\n ", i);
- strcat(buffer, h_buf);
-
- for(i=j=0; j<31; j++)
- {
- if(isprint(STHeader->st_Instruments[j].st_InstrumentName[0]))
- {
- STHeader->st_Instruments[j].st_InstrumentName[21] = (UBYTE) 0;
-
- sprintf(h_buf, "\42%-21s\42 ", STHeader->st_Instruments[j].st_InstrumentName);
- strcat(buffer, h_buf);
-
- if(!(++i % 3)) strcat(buffer, "\n ");
- }
- }
-
- }else retval = SPERR_NO_HANDLE;
-
- if(!retval)
- {
- if(noinfo)
- {
- strcat(buffer, "\n File Information"
- "\n\n No information available\n");
- }
-
- estr = AllocVec(sizeof(struct EasyStruct), MEMF_CLEAR);
- if(estr)
- {
- estr->es_StructSize = sizeof(struct EasyStruct);
- estr->es_Flags = N;
- estr->es_Title = "SuperPlay InfoRequester";
- estr->es_TextFormat = buffer;
- estr->es_GadgetFormat = "Confirm";
-
- if(!disp_win) disp_win = SPObjectHandle->ah_ReqIOWindow;
-
- EasyRequestArgs(disp_win, estr, &idcmp, N);
- FreeVec(estr);
- }
- }
-
- return(retval);
- }
-
- /* *************************************************** */
- /* * * */
- /* * SPLI_CheckFileType : ... * */
- /* * * */
- /* *************************************************** */
-
- ULONG __saveds __asm SPO_CheckFileType(register __a1 BPTR handle_a1, register __a2 UBYTE *filename, register __a3 APTR future)
- {
- UBYTE *nameptr = filename;
-
- while(*nameptr)
- {
- if(*nameptr=='.')
- {
- if(!strnicmp("MOD.", nameptr-3, 4)) return(TRUE);
- if(!strnicmp(".MOD", nameptr, 4)) return(TRUE);
- }
-
- nameptr++;
- }
-
- return(FALSE);
- }
-
- extern void Fmt(void); /* Assembler-Routine for RawDoFmt */
-
- void __saveds __stdargs SPLI_SPrintf(APTR buffer, char *formatstring, ...)
- {
- RawDoFmt((APTR) formatstring, (APTR) (((ULONG *)&formatstring)+1), (APTR) &Fmt, (APTR) buffer);
- }
-